/*******************************************************************************
* Имя файла: twoTask.cpp
* Дата: 21-04-2024
* Разработчик: Андрей Подлегаев
* Группа: 315
* Факультет: ЦДО ТУСУР
* Лицензия: BSD
* Описание: Решение задач к лабораторной работе № 6 (ЦДО ТУСУР)
* *****************************************************************************/
#include "twoTask.h"

/* Реализация функции ввода (с проверкой) количества элементов контейнера */
int checkInputNumberElements()
{
  std::cout << "Введите количество элементов N (от 1 до 1000): ";

  int numberElements;
  bool successfulInput{false};
  do {
      std::cin >> numberElements;
      while (std::cin.fail()) {
          std::cin.clear();
          std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
          print("Некорректный ввод!\n", COLOR_RED);
          std::cout << "Введите количество элементов N (от 1 до 1000): ";
          std::cin >> numberElements;
        }

      if (numberElements >= 1 && numberElements <= 1000) {
          successfulInput = true;
        }
      else {
          print("Введеное число элементов не входит в интервал от 1 до 1000!\n", COLOR_RED);
          std::cout << "Введите количество элементов N (от 1 до 1000): ";
        }
    } while (!successfulInput);

  return numberElements;
}

/* Реализация функции создания контернейра заполненного случайными числами*/
std::vector<int> createContainer(const int xNumberElements)
{
  srand(time(NULL));
  std::vector<int> vec;
  for (int i{}; i < xNumberElements; ++i) {
      vec.push_back(rand() % 100);
    }
  return vec;
}

/* Реализация функции вывода контейнера (вектор) в консоль */
void printContainer(std::vector<int>& vec)
{
  for (const auto &element : vec) {
      std::cout << element << " ";
    }
  std::cout << '\n';
}

/* Реализация функции вывода контейнера (лист для задания 4) в консоль */
void printContainer(std::list<int>& lst)
{
  for (const auto &element : lst) {
      std::cout << element << " ";
    }
  std::cout << '\n';
}

/* Реализация функции вывода контейнера (лист для задания 5) в консоль */
void printContainer(std::list<double>& lst)
{
  for (const auto &element : lst) {
      std::cout << element << " ";
    }
  std::cout << '\n';
}

/* Реализация функции подсчёта уникальных значений в контейнере */
int getNumberUniqueElements(std::vector<int>& vec)
{
  sort(vec.begin(), vec.end());
  return std::unique(vec.begin(), vec.end()) - vec.begin();
}
